USB 双角色驱动程序堆栈体系结构 您所在的位置:网站首页 type c连接器项目描述 USB 双角色驱动程序堆栈体系结构

USB 双角色驱动程序堆栈体系结构

2023-04-13 08:15| 来源: 网络整理| 查看: 265

USB 双角色驱动程序堆栈体系结构 项目 09/22/2022

USB 双角色控制器现在在 Windows 中受支持,从桌面版 (家庭版、Pro版、Enterprise) 和教育版Windows 10开始,Windows 10 移动版。

简介

USB 双角色功能使系统可以是 USB 设备 或 USB 主机。 可在“Go 信息”页上的 USB-IF 的 USB 中找到 USB 双角色的详细规范。

此处的重要一点是,双重角色功能允许移动设备(如手机、平板或平板电脑)将自身指定为设备或主机。

当移动设备处于 功能 模式时,它会附加到充当附加移动设备主机的电脑或其他一些设备。

移动设备处于 主机 模式时,用户可以将其设备(如鼠标或键盘)附加到该设备。 在这种情况下,移动设备托管附加的设备。

通过在 Windows 10 中为 USB 双重角色提供支持,我们具有以下优势:

通过 USB 连接到移动外围设备,与无线协议(如蓝牙)相比,它提供更大的数据带宽。 只要) 存在所需的硬件支持,通过 USB 连接到其他 USB 设备并与其他 USB 设备通信时,电池充电选项就 (。 启用最有可能拥有移动设备的客户,例如智能手机,用于所有工作。 此功能将允许在有线停靠方案中提高工作效率,其中移动设备停靠并托管外围设备。

下表显示了桌面和移动 SKU 上提供的主机类驱动程序列表,这些驱动程序在Windows的移动 SKU 上可用。

USB 主机类驱动程序 Windows 10 移动版 Windows 10 桌面版 USB 中心 (USBHUB) 是 是自 2000 Windows 2000) 以来 ( HID - 键盘/鼠标 (HidClass、KBDCLass、MouClass、KBDHid、MouHid) 是 是自 2000 Windows 2000) 以来 ( USB 质量存储 (批量 & UASP) 是 是自 2000 Windows 2000) 以来 ( 通用 USB 主机驱动程序 (WinUSB) 是 是自 Windows Vista) 以来的 ( USB 音频传入/输出 (USBAUDIO) 是 是自WINDOWS XP) 以来的 ( 串行设备 (USBSER) 是 是自Windows 10) 以来的 ( 蓝牙 (BTHUSB) 是 是自WINDOWS XP) 以来的 ( 打印 (usbprint) 否 是自WINDOWS XP) 以来的 ( 扫描 (USBSCAN) 否 是自 2000 Windows 2000) 以来 ( WebCam (USBVIDEO) 否 是自 Windows Vista) 以来的 ( 媒体传输协议 (MTP 发起程序) 否 是自 Windows Vista) 以来的 ( 远程 NDIS (RNDIS) 否 是自WINDOWS XP) 以来的 ( USB (IPoverUSB) 的 IP 否 是 (Windows 10) 的新增功能

表中的类驱动程序是根据设备类遥测选择的,并且基于为Windows 10选择的关键方案。 我们计划包括有限数量的收件箱、第三方主机驱动程序,以支持Windows 10 移动版上的关键设备。 对于桌面版的Windows 10,这些驱动程序将在 OEM 的网站上或通过 Windows 更新 (WU) 提供。

对于Windows 10 移动版,未包含在收件箱的第三方驱动程序在 WU 上不可用。 USB 主机堆栈 + HID 的磁盘占用空间一直保持较小。 这就是为什么并非所有类驱动程序,并且很少有第三方驱动程序包含在Windows 10 移动版的收件箱中。 希望提供第三方驱动程序的 OEM 可以使用板支持包 (BSP) 将其添加到移动设备的 OS 映像。

下表显示了在Windows的移动 SKU 上可用的函数类驱动程序。

注意

对于桌面版,函数驱动程序在Windows 10不可用。

USB 函数类驱动程序 Windows 10 移动版 Windows 10 桌面版 备注 媒体传输协议 (MTP 响应程序) 是 否 桌面上的 MTP 响应程序没有方案。 桌面系统之间的 P2P 方案是通过 WinUSB 上的Easy-MigCable启用的。 视频显示 (vidstream) 是 否 泛型 USB 函数驱动程序 (GenericUSBFn) 是 否 IPoverUSB 和其他桌面刷写方案需要此操作。

我们将监视设备附件数据,告知我们是否需要提供其他类驱动程序支持,因为设备类受欢迎程度列表随时间而变化。

驱动程序实现

Microsoft USB 角色交换机 (URS) 驱动程序允许系统实现者利用其平台的双角色 USB 功能。

URS 驱动程序旨在为使用单个 USB 控制器的平台提供双角色功能,这些控制器可以通过单个端口在主机角色和外围角色中运行。 外围角色也称为函数角色。 URS 驱动程序根据平台中的硬件事件管理端口的当前角色,以及适当软件堆栈的加载和卸载。

在具有 USB 微 AB 连接器的系统上,驱动程序使用硬件中断,指示连接器上的 ID 引脚的状态。 此引脚用于检测控制器是否需要在连接中承担主机角色或函数角色。 有关详细信息,请参阅 USB On-The-Go 规范。 在具有 USB Type-C 连接器的系统上,OEM 实现者应通过使用 USB Type-C 连接器驱动程序编程接口提供连接器客户端驱动程序。 客户端驱动程序与 Microsoft 提供的 USB 连接器管理器类扩展 (UcmCx) 通信,以管理 USB 类型 C 连接器的各个方面,例如 CC 检测、PD 消息传送和其他方面。 对于角色切换,客户端驱动程序会将 USB Type-C 连接器的状态传达给 URS 驱动程序。

下图显示了使用 URS 驱动程序的双角色控制器的 USB 软件驱动程序堆栈。

请注意,URS 驱动程序永远不会同时加载上图中显示的函数和主机堆栈。 URS 驱动程序 将加载函数 堆栈 或 主机堆栈 ,具体取决于 USB 控制器的角色。

硬件要求

如果要开发将利用 URS 驱动程序的平台,以提供双角色 USB 功能,必须满足以下硬件要求:

USB 控制器

这些驱动程序由 Microsoft 提供为现成驱动程序。

Synopsys DesignWare Core USB 3.0 控制器。 收件箱 INF:UrsSynopsys.inf。

Chipidea High-Speed USB OTG 控制器。 收件箱 INF:UrsChipidea.inf。

ID 引脚中断

可以通过以下两种方式之一实现非 USB 类型 C 系统的 ID 引脚中断 () :

两个边缘触发的中断:一个在连接线上的 ID 引脚被停电时触发,另一个在 ID 引脚浮动时触发。

一个活动-两个中断,当 ID 引脚处于连接状态时处于活动级别。

USB 控制器枚举

USB 双角色控制器必须枚举 ACPI。

软件支持

URS 驱动程序需要一个软件接口,允许通过连接器控制 VBus。 此接口特定于 SoC。 有关更多详细信息,请联系 SoC 供应商。

Windows不支持这些 USB OTG 功能:

附件充电器适配器检测 (ACA) 。 会话请求协议 (SRP) 。 主机协商协议 (HNP) 。 附加检测协议 (ADP) 。 ACPI 系统配置

若要使用 URS 驱动程序,必须为系统创建 ACPI 定义文件。 此外,还必须考虑一些与驱动程序相关的注意事项。

下面是 USB 双角色控制器的示例 ACPI 定义。

// // You may name the device whatever you want; we don't depend on it being called 'URS0'. // Device(URS0) { // // Replace with your own hardware ID. Microsoft will add it to the inbox INF, // or you may choose to author a custom INF that uses Needs & Includes directives // to include sections from the inbox INF. // Name(_HID, "ABCD1234") Name(_CRS, ResourceTemplate() { // // The register space for the controller must be defined here. // Memory32Fixed(ReadWrite, 0xf1000000, 0xfffff) // // The ID pin interrupts, if you are using two edge-triggered interrupts. // GpioInt(Edge, ActiveHigh, Exclusive, PullUp, 0, "\\_SB.GPI0", 0, ResourceConsumer, , ){0x1001} GpioInt(Edge, ActiveHigh, Exclusive, PullUp, 0, "\\_SB.GPI0", 0, ResourceConsumer, , ){0x1002} // // Following is an example of a single active-both interrupt. // // GpioInt(Edge, ActiveBoth, Exclusive, PullUp, 0, "\\_SB.GPI0", 0, ResourceConsumer, , ){0x12} // // // For a Type-C platform, you do not need to specify any interrupts here. // }) // // This child device represents the USB host controller. This device node is in effect // when the controller is in host mode. // You may name the device whatever you want; we don't depend on it being called 'USB0'. // Device(USB0) { // // The host controller device node needs to have an address of '0' // Name(_ADR, 0) Name(_CRS, ResourceTemplate() { // // The controller interrupt. // Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive, , , ){0x10} }) } // // This child device represents the USB function controller. This device node is in effect // when the controller is in device/function/peripheral mode. // You may name the device whatever you want; we don't depend on it being called 'UFN0'. // Device(UFN0) { // // The function controller device node needs to have an address of '1' // Name(_ADR, 1) Name(_CRS, ResourceTemplate() { // // The controller interrupt (this could be the same as the one defined in // the host controller). // Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive, , , ){0x11} }) } }

下面是 ACPI 文件的主要部分的一些说明:

URS0 是 USB 双角色控制器的 ACPI 定义。 这是 URS 驱动程序将加载的 ACPI 设备。

USB0 和 UFN0 是 URS0 范围内的子设备。 USB0 和 UFN0 分别表示 URS 驱动程序将枚举的两个子堆栈,以及主机和函数堆栈。 请注意,_ADR是 ACPI 将这些设备定义与 URS 驱动程序创建的设备对象匹配的方法。

如果控制器对两个角色使用相同的中断,则可以在两个子设备中描述相同的控制器中断。 即使在这种情况下,中断仍可描述为“独占”。

可以根据需要添加此 ACPI 定义文件。 例如,可以在 ACPI 定义文件中的任何设备上设置任何其他必要的方法或属性。 此类添加不会干扰 URS 驱动程序的操作。 任何堆栈中所需的任何其他资源也可以在相应设备的_CRS中描述。

URS 驱动程序将硬件 ID 分配给主机和函数堆栈。 这些硬件 ID 派生自 URS 设备的硬件 ID。 例如,如果有硬件 ID 为 ACPI\ABCD1234 的 URS 设备,则 URS 驱动程序会为主机和函数堆栈创建硬件 ID,如下所示:

主机堆栈:URS\ABCD1234HOST&

函数堆栈:URS\ABCD1234FUNCTION&

INF 驱动程序安装包

如有必要,第三方驱动程序包可以依赖于此方案。

如果你是 IHV 或 OEM,并且你正在考虑提供自己的驱动程序包,以下是需要考虑的一些事项:

URS 驱动程序包

预计每个平台上双角色控制器的硬件 ID 将添加到收件箱 INF for URS。 但是,如果出于某种原因无法添加 ID,IHV/OEM 可能会为驱动程序包提供需要/包括收件箱 INF 并匹配其硬件 ID 的 INF。

在 IHV/OEM 要求驱动程序堆栈中存在筛选器驱动程序的情况下,这是必需的。

主机驱动程序包。

需要/包括收件箱 usbxhci.inf 并匹配主机设备硬件 ID 的 IHV/OEM 提供的驱动程序包。 硬件 ID 匹配将基于上一部分所述的方案。

在 IHV/OEM 要求驱动程序堆栈中存在筛选器驱动程序的情况下,这是必需的。

正在进行的工作是让 URS 驱动程序为主机设备分配 XHCI 兼容 ID。

函数驱动程序包

需要/包括收件箱 Ufxsynopsys.inf 并匹配外围设备硬件 ID 的 IHV/OEM 提供的驱动程序包。 硬件 ID 匹配将基于上一部分所述的方案。

IHV/OEM 还可以在驱动程序包中包含筛选器驱动程序。

另请参阅

双角色控制器驱动程序参考



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有